Майнор "Интеллектуальный анализ данных"

Курс "Введение в анализ данных"

Лабораторная работа №2. Кластерный анализ.

Часть 1

В данном задании вам необходимо самостоятельно реализовать один из алгоритмов кластеризации.
По аналогии с классами в scikit-learn, нужно реализовать класс, наследуемый от Base Estimator.
Подробнее про реализацию своих моделей в scikit-learn: here.
В классе помимо __init__() нужно реализовать два метода:

Для удобства можно создавать дополнительные методы класса, которые будут вызываться в fit() или predict().
Функции для вычисления расстояний между объектами самим реализовывать не нужно, используйте реализации из scipy.

Вариант №1

Алгоритм агломеративной кластеризации.

Параметры:

Атрибуты:

Дополнительно нужно реализовать метод get_labels() для вычисления labels_, он должен быть аналогичен fcluster().
В случае, если n_clusters не None, то после вычисления матрицы z_ в методе fit() должен быть вызван get_labels() с соответствующими параметрами, и вычислены labels_. В других случаях метод fit() только вычисляет матрицу z_, для вычисления labels_ нужно явно вызывать get_labels().

Метод predict(): Кластер для нового объекта определяется по методу, заданному в linkage.
Note: Метод predict() не выполняется в случае, когда metric - это матрица расстояний.

Вариант №2

Алгоритм Dbscan.

Параметры:

Атрибуты:

Метод predict(): Для нового объекта вычисляется число основных точек из каждого кластера, попавших в окрестность $\varepsilon$. Объект определяется в кластер с наибольшим числом таких точек.
Note: Метод predict() не выполняется в случае, когда metric - это матрица расстояний.

Вариант №3

Алгоритм K-Means.

Параметры:

Атрибуты:

Метод predict(): Новый объект определяется в кластер, центр которого расположен ближе всех к этому объекту.

Тестирование

Вашу реализацию необходимо сравнить с питоновской реализацией алгоритма из sklearn или scipy. Результаты кластеризации должны совпадать.
Также необходимо сравнить скорость работы вашей реализации и питоновской (это нормально, если ваша реализация будет медленнее).
Сравнение необходимо выполнить на наборе данных iris.

Заключение

Бонусное

Дополнительно вы можете поработать над эффективностью алгоритма по скорости и памяти, добавить поддержку многопоточности, или расширить базовый функционал.

Заключение

Распределение по вариантам

Вариант №1

Вариант №2

Вариант №3

Часть 2

В данном задании вам предлагается проанализировать набор данных по различным городам США. Каждый город характеризуется следующими признаками:

Notes:

Задания:

  1. Выполните необходимую предобработку данных. Перед кластеризацией исключите из данных признаки Place, Long и Lat.
  1. Выполните кластеризацию иерархическим методом.
    Рассмотрите различные расстояния между объектами. Определите, какие следует использовать при кластеризации.
    Выполните кластеризацию с различными расстояниями между кластерами. Сравните результаты, сделайте выводы.
  1. Выполните кластеризацию методом Dbscan. Используйте расстояния между объектами, определенные в предыдущем пункте.
    Реализуйте эвристику (см. лекции) для выбора параметров алгоритма. Подберите подходящие параметры алгоритма.
  1. Выполните кластеризацию методом kmeans. Определите наилучшее (на ваш взгляд) число кластеров.
  1. (Бонусное) Выполните кластеризацию другими методами. Например, HDBSCAN или алгоритмы, реализованные в scikit-learn.
  1. В результате выполнения предыдущих пунктов вы должны получить 4 или больше разбиений объектов (по одному на каждый метод). Сравните их между собой, сделайте выводы о сходствах и различиях.
    Оцените результаты каждой кластеризации, используя метрики, рассмотренные на занятиях (Silhouette и прочие).
  1. Выберите одно разбиение, наиболее подходящее на ваш взгляд. Предложите интерпретацию полученным кластерам или покажите, что этого сделать нельзя.
  1. Оцените, как полученные кластеры распределены географически.
    Оцените, как полученные кластеры распределены по штатам. Можно ли выделить какую-то зависимость (территориальную или для штатов)?
    (Бонусное) Провизуализируйте распределение на карте США.

Предобработка

Иерархическая кластеризация

Полезные функции

Исследование данных и определение оптимального количества кластеров

Experiments with ward & euclidean distances

Заключение

Experiments with complete linkage

Experiments with single linkage

Experiments with average linkage

Заключение

Выводы:

Расстояния, которые могут быть использованы для кластеризации этого датасета:

  1. Пара расстояний ward & euclidean хорошо разбивает данные на кластеры, но 3й выделенный кластер может быть интерпретирован как выбросы
  2. Пары complete & cosine и average & cosine тоже могут быть использованы для кластеризации, но стоит учитывать, что косинусное расстояние не учитывает абсолютное расстояние между наблюдениями в векторном пространстве, а только угол между ними, что позволяет выявлять тенденции в данных.

Вывод по используемым расстояниям:

DBSCAN

Заключение

KMeans

Заключение

HDBSCAN

Заключение

Сравнение результатов различных алгоритмов

Заключение

Интерпретация наилучшего метода кластеризации

Заключение



Выводы:

Географическое распределение кластеров

Заключение